/**
 * 任务控制器
 * Ver : CCMiniCloud Framework 2.0.1 ALL RIGHTS RESERVED BY cclinux0730 (wechat)
 * Date: 2024-08-28 08:00:00 
 */

const BaseController = require('./base_controller.js');
const TaskService = require('../service/task_service.js');
const timeUtil = require('../../../framework/helpers/time_util.js');

class TaskController extends BaseController {

	/**
	 * 构造函数
	 */
	constructor() {
		super();
		this._taskService = new TaskService();
	}

	/**
	 * 创建任务
	 */
	async createTask() {
		// 数据校验
		const rules = {
			task_title: 'string|min:1|max:50|name=任务标题',
			task_desc: 'string|max:200|name=任务描述',
			task_project_id: 'string|required|name=项目ID',
			task_priority: 'int|min:1|max:10|default=5|name=优先级',
			task_required: 'bool|default=false|name=是否必须完成',
			task_assign: 'string|name=指派人员',
			task_start_time: 'string|name=开始时间',
			task_end_time: 'string|name=结束时间'
		};

		// 取得数据
		const params = await this.validateData(rules);

		// 调用服务层创建
		const result = await this._taskService.createTask(params);
		return result;
	}

	/**
	 * 批量创建任务
	 */
	async batchCreateTasks() {
		// 数据校验
		const rules = {
			projectId: 'string|required|name=项目ID',
			tasks: 'array|required|name=任务列表'
		};

		// 取得数据
		const params = await this.validateData(rules);

		// 调用服务层创建
		const result = await this._taskService.batchCreateTasks(params.projectId, params.tasks);
		return result;
	}

	/**
	 * 创建项目状态关联任务
	 */
	async createProjectStatusTasks() {
		// 数据校验
		const rules = {
			projectId: 'string|required|name=项目ID',
			projectStatus: 'string|required|name=项目状态',
			tasks: 'array|required|name=任务列表'
		};

		// 取得数据
		const params = await this.validateData(rules);

		// 调用服务层创建
		const result = await this._taskService.createProjectStatusTasks(
			params.projectId,
			params.projectStatus,
			params.tasks
		);
		
		return result;
	}

	/**
	 * 更新任务状态
	 */
	async updateTaskStatus() {
		// 数据校验
		const rules = {
			taskId: 'string|required|name=任务ID',
			status: 'int|required|in:0,1,2,3|name=任务状态',
			progress: 'int|min:0|max:100|name=任务进度'
		};

		// 取得数据
		const params = await this.validateData(rules);

		// 获取当前用户ID
		const userId = this._userId;

		// 调用服务层更新
		const result = await this._taskService.updateTaskStatus(
			params.taskId,
			params.status,
			params.progress,
			userId
		);
		
		return result;
	}

	/**
	 * 获取项目任务列表
	 */
	async getProjectTasks() {
		// 数据校验
		const rules = {
			projectId: 'string|required|name=项目ID',
			search: 'string|name=搜索关键词',
			sortType: 'string|name=排序字段',
			sortVal: 'int|name=排序方式',
			page: 'int|default=1|name=页码',
			size: 'int|default=10|name=每页条数',
			status: 'int|name=任务状态'
		};

		// 取得数据
		const params = await this.validateData(rules);

		// 调用服务层查询
		const result = await this._taskService.getProjectTasks(params);
		return result;
	}

	/**
	 * 获取我的任务列表
	 */
	async getMyTasks() {
		// 数据校验
		const rules = {
			search: 'string|name=搜索关键词',
			sortType: 'string|name=排序字段',
			sortVal: 'int|name=排序方式',
			page: 'int|default=1|name=页码',
			size: 'int|default=10|name=每页条数',
			status: 'int|name=任务状态'
		};

		// 取得数据
		const params = await this.validateData(rules);

		// 获取当前用户ID
		params.userId = this._userId;

		// 调用服务层查询
		const result = await this._taskService.getMyTasks(params);
		return result;
	}

	/**
	 * 获取任务统计数据
	 */
	async getTaskStats() {
		// 数据校验
		const rules = {
			projectId: 'string|required|name=项目ID'
		};

		// 取得数据
		const params = await this.validateData(rules);

		// 调用服务层查询
		const result = await this._taskService.getTaskStats(params.projectId);
		return result;
	}

	/**
	 * 获取任务详情
	 */
	async getTaskDetail() {
		// 数据校验
		const rules = {
			taskId: 'string|required|name=任务ID'
		};

		// 取得数据
		const params = await this.validateData(rules);

		// 调用服务层查询
		const result = await this._taskService.getTaskDetail(params.taskId);
		return result;
	}

	/**
	 * 删除任务
	 */
	async deleteTask() {
		// 数据校验
		const rules = {
			taskId: 'string|required|name=任务ID'
		};

		// 取得数据
		const params = await this.validateData(rules);

		// 调用服务层删除
		const result = await this._taskService.deleteTask(params.taskId);
		return result;
	}

	/**
	 * 检查项目转换条件
	 */
	async checkProjectTransitionCondition() {
		// 数据校验
		const rules = {
			projectId: 'string|required|name=项目ID'
		};

		// 取得数据
		const params = await this.validateData(rules);

		// 调用服务层查询
		const result = await this._taskService.checkProjectTransitionCondition(params.projectId);
		return result;
	}

	/**
	 * 删除项目下所有任务
	 */
	async deleteProjectTasks() {
		// 获取请求参数
		let rules = {
			projectId: 'required|string|min:1|max:50|name=项目ID'
		};

		// 验证参数
		await this.validateData(rules);

		// 获取参数
		let params = this.getValidateData();

		// 调用服务
		let service = new TaskService();
		let result = await service.deleteProjectTasks(params.projectId);

		return result;
	}
}

module.exports = TaskController; 